package pro.cherish.knowledgeumldesignpattern.designPattern.com.cherish.flyweight;

/**
 * 享元模式由于其共享的特性，可以在任何池中操作，比如线程池、数据库连接池
 * String类设计也是享元模式，共享常量池中的对象
 */
//例子中，100个棋子有100个对象，其中颜色都是很类似，就黑白之分，对象大：颜色加位置，
//    使用了享元模式后，对象将只有2个，黑白，但是外部状态位置就有100个对象，但是总体来看，节省了内部状态颜色的内存
//    缺点：模式较为复杂，程序逻辑复杂化，为了节省内存，共享内部状态，分离外部状态，而读取外部状态使得运行时间变长，时间换空间
public class client {
    public static void main(String [] args){
        CherssFlyWeight c1 = ChessFlyWeightFactory.getChess("黑色");
        CherssFlyWeight c2 = ChessFlyWeightFactory.getChess("黑色");
        System.out.println(c1);
        System.out.println(c2);
//  同一个对象
// pro.cherish.knowledgeumldesignpattern.designPattern.com.cherish.flyweight.ConcreteChess@4554617c
//com.cherish.flyweight.ConcreteChess@4554617c
        System.out.println("增加外部状态的处理================");
//        时间浪费在创建小对象（外部状态对象），但是一般还是得用享元模式
        c1.display(new Coordinate(10,10));
        c1.display(new Coordinate(20,20));
    }
}
